package cn.jbolt.ai.core;

public class AIPrompts {


    /**
     * 文本语义分割提示词
     */
    public static final String SPLIT_TEMPLATE = "请将以下文档内容按照语义完整性拆分成多个独立的文本块，并严格遵循以下要求：\n" +
            "\n" +
            "拆分规则：\n" +
            "1. 每个文本块必须是一个完整的语义单元，确保其独立性和完整性，使其可以作为独立的参考资料。\n" +
            "2. 文本块的划分应基于以下特征：\n" +
            "   - 主题或话题的转换\n" +
            "   - 段落层级的变化（如新的章节开始）\n" +
            "   - 内容逻辑的自然分界点（如句号、换行符）\n" +
            "3. 不允许将单独的标题作为一个文本块\n" +
            "4. 确保相关联的内容被划分在同一个文本块中，特别注意：\n" +
            "   - 标题与其对应的内容必须在同一文本块\n" +
            "   - 问题(Q/问题)与答案(A/回答)必须被视为一个不可分割的整体，放在同一文本块\n" +
            "   - 具有明显对应关系的内容（如编号问题及其解答）不可分离\n" +
            "\n" +
            "5. 特殊格式识别：\n" +
            "   - 识别问答对模式：无论是\"Q:\"和\"A:\"、\"问：\"和\"答：\"，还是类似的其他问答标记，都应将整个问答对视为一个文本块\n" +
            "   - 如果连续出现的行存在明显的从属关系（如标题和正文、问题和回答），不应将它们分开\n" +
            "\n" +
            "输出要求：\n" +
            "- 仅输出一个HTML无序列表（ul标签），列表中的每个项目（li标签）必须是：\n" +
            "- 每个文本块的第一句完整文本（截止到第一个句号、问号、感叹号、换行符）\n" +
            "- 必须完全保留原文的标点符号、换行符和格式\n" +
            "- 不得对文本进行任何修改或优化\n" +
            "- 不允许包含任何其他内容，不允许使用markdown格式化或代码块包装\n" +
            "\n" +
            "示例1（一般内容）：\n" +
            "输入：\n" +
            "软件开发项目管理手册\n" +
            "本手册旨在规范软件开发流程，提高团队协作效率。\n" +
            "\n" +
            "第一章 项目启动\n" +
            "项目启动是整个开发周期中的关键阶段。在此阶段，项目经理需要完成团队组建、资源分配等基础工作。\n" +
            "\n" +
            "输出：\n" +
            "<ul> <li>软件开发项目管理手册</li> <li>第一章 项目启动</li> </ul>\n" +
            "\n" +
            "示例2（问答对）：\n" +
            "输入：\n" +
            "Q16: 你们提供什么服务\n" +
            "A： 我们提供大模型部署服务\n" +
            "\n" +
            "Q17: 如何联系客服\n" +
            "A： 您可以通过官网底部的联系方式与我们取得联系\n" +
            "\n" +
            "输出：\n" +
            "<ul> <li>Q16: 你们提供什么服务</li> <li>Q17: 如何联系客服</li> </ul>\n" +
            "\n" +
            "待处理文本：\n" +
            "{}";


    /**
     * 让大模型从文本中抽取出问答对
     */
    public static final String EXTRACT_QA_TEMPLATE = "你是一个精确的文本分析专家。你的任务是从我提供的文本中抽取问答对。\n" +
            "\n" +
            "请严格遵循以下规则：\n" +
            "1. 仔细分析文本，识别具有明确问答关系的内容\n" +
            "2. 保持原文的完整性，禁止对内容进行任何修改、改写或总结\n" +
            "3. 只提取确实以问答形式出现的内容\n" +
            "4. 确保问题和答案都完整按照原文表述(格式、文本、图片、链接、附件等都必须和原文保持一致)\n" +
            "5. 输出必须严格按照以下XML格式：\n" +
            "   <ul>\n" +
            "     <li><que>原文中的完整问题1</que><ans>对应的完整答案1</ans></li>\n" +
            "     <li><que>原文中的完整问题2</que><ans>对应的完整答案2</ans></li>\n" +
            "     ...\n" +
            "   </ul>\n" +
            "\n" +
            "6. 判断标准：\n" +
            "   - 问题通常以\"什么是\"、\"如何\"、\"为什么\"、\"问题：\"、\"Q\"等开头，或以问号结尾\n" +
            "   - 答案是紧跟问题后的相关解释内容\n" +
            "   - 只提取有明确问答关系的内容\n" +
            "   - 不推断或构建问答关系\n" +
            "   - 不补充或修改任何内容\n" +
            "\n" +
            "请开始分析以下文本并提取问答对：\n" +
            "{}\n" +
            "\n" +
            "注意：只返回提取的问答对，不要添加任何解释或说明。";


    /**
     * 让大模型基于func执行结果生成回答
     */
    public static final String CHAT_WITH_FUNC_RESULT = "你是一个专业的数据分析助手。请分析以下信息并生成简洁的响应:\n" +
            "\n" +
            "1. 业务执行描述:\n" +
            "${funcResource}\n" +
            "\n" +
            "2. 执行结果:\n" +
            "${funcResult}\n" +
            "\n" +
            "3. 用户问题:\n" +
            "${prompt}\n" +
            "\n" +
            "分析规则:\n" +
            "- 如果结果是数组：使用markdown表格格式展示，表头要基于数据特征合理设置\n" +
            "- 如果结果是基本数据类型(数字/字符串/布尔值)：直接返回该值\n" +
            "- 如果结果是对象：根据对象的结构采用最易读的格式展示(可以是缩进式文本或表格)\n" +
            "- 如果结果包含多层嵌套：适当进行数据展平和重组以提高可读性\n" +
            "\n" +
            "输出要求:\n" +
            "1. 只输出处理后的结果，不要包含任何过程性描述或场景引导语\n" +
            "2. 确保格式规范，避免多余空行\n" +
            "3. 如果格式是markdown，则直接输出markdown内容，不允许使用```markdown 包裹\n" +
            "4. 对于复杂数据，可以适当添加数值单位或简短说明，但需要保持简洁\n" +
            "5. 如果数据为空或异常，直接说明\"无数据\"或具体的错误情况\n" +
            "\n" +
            "补充规则:\n" +
            "- 表格中的数值需要合适的对齐方式\n" +
            "- 大数字使用千位分隔符\n" +
            "- 小数保留合适的位数\n" +
            "- 时间日期采用统一的格式";

}
